{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Adversarial-Robustness-Toolbox for LightGBM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import lightgbm as lgb\n",
    "\n",
    "from sklearn.datasets import load_iris\n",
    "\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "from art.classifiers import LightGBMClassifier\n",
    "from art.attacks import ZooAttack\n",
    "from art.utils import load_mnist\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 Training LighGBM classifier and attacking with ART Zeroth Order Optimization attack"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_adversarial_examples(x_train, y_train, num_classes):\n",
    "    \n",
    "    # Create and fit LightGBM model\n",
    "    num_round = 10\n",
    "    param = {'objective': 'multiclass', 'metric': 'multi_logloss', 'num_class': num_classes}\n",
    "    train_data = lgb.Dataset(x_train, label=y_train)\n",
    "    model = lgb.train(param, train_data, num_round, valid_sets=[])\n",
    "\n",
    "    # Create ART classifier for LightGBM\n",
    "    art_classifier = LightGBMClassifier(model=model)\n",
    "\n",
    "    # Create ART Zeroth Order Optimization attack\n",
    "    zoo = ZooAttack(classifier=art_classifier, confidence=0.0, targeted=False, learning_rate=1e-1, max_iter=20,\n",
    "                    binary_search_steps=10, initial_const=1e-3, abort_early=True, use_resize=False, \n",
    "                    use_importance=False, nb_parallel=1, batch_size=1, variable_h=0.2)\n",
    "\n",
    "    # Generate adversarial samples with ART Zeroth Order Optimization attack\n",
    "    x_train_adv = zoo.generate(x_train)\n",
    "\n",
    "    return x_train_adv, model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1.1 Utility functions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data(num_classes):\n",
    "    x_train, y_train = load_iris(return_X_y=True)\n",
    "    x_train = x_train[y_train < num_classes][:, [0, 1]]\n",
    "    y_train = y_train[y_train < num_classes]\n",
    "    x_train[:, 0][y_train == 0] *= 2\n",
    "    x_train[:, 1][y_train == 2] *= 2\n",
    "    x_train[:, 0][y_train == 0] -= 3\n",
    "    x_train[:, 1][y_train == 2] -= 2\n",
    "    \n",
    "    x_train[:, 0] = (x_train[:, 0] - 4) / (9 - 4)\n",
    "    x_train[:, 1] = (x_train[:, 1] - 1) / (6 - 1)\n",
    "    \n",
    "    return x_train, y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_results(model, x_train, y_train, x_train_adv, num_classes):\n",
    "    \n",
    "    fig, axs = plt.subplots(1, num_classes, figsize=(num_classes * 5, 5))\n",
    "\n",
    "    colors = ['orange', 'blue', 'green']\n",
    "\n",
    "    for i_class in range(num_classes):\n",
    "\n",
    "        # Plot difference vectors\n",
    "        for i in range(y_train[y_train == i_class].shape[0]):\n",
    "            x_1_0 = x_train[y_train == i_class][i, 0]\n",
    "            x_1_1 = x_train[y_train == i_class][i, 1]\n",
    "            x_2_0 = x_train_adv[y_train == i_class][i, 0]\n",
    "            x_2_1 = x_train_adv[y_train == i_class][i, 1]\n",
    "            if x_1_0 != x_2_0 or x_1_1 != x_2_1:\n",
    "                axs[i_class].plot([x_1_0, x_2_0], [x_1_1, x_2_1], c='black', zorder=1)\n",
    "\n",
    "        # Plot benign samples\n",
    "        for i_class_2 in range(num_classes):\n",
    "            axs[i_class].scatter(x_train[y_train == i_class_2][:, 0], x_train[y_train == i_class_2][:, 1], s=20,\n",
    "                                 zorder=2, c=colors[i_class_2])\n",
    "        axs[i_class].set_aspect('equal', adjustable='box')\n",
    "\n",
    "        # Show predicted probability as contour plot\n",
    "        h = .01\n",
    "        x_min, x_max = 0, 1\n",
    "        y_min, y_max = 0, 1\n",
    "\n",
    "        xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\n",
    "\n",
    "        Z_proba = model.predict(np.c_[xx.ravel(), yy.ravel()])\n",
    "        Z_proba = Z_proba[:, i_class].reshape(xx.shape)\n",
    "        im = axs[i_class].contourf(xx, yy, Z_proba, levels=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0],\n",
    "                                   vmin=0, vmax=1)\n",
    "        if i_class == num_classes - 1:\n",
    "            cax = fig.add_axes([0.95, 0.2, 0.025, 0.6])\n",
    "            plt.colorbar(im, ax=axs[i_class], cax=cax)\n",
    "\n",
    "        # Plot adversarial samples\n",
    "        for i in range(y_train[y_train == i_class].shape[0]):\n",
    "            x_1_0 = x_train[y_train == i_class][i, 0]\n",
    "            x_1_1 = x_train[y_train == i_class][i, 1]\n",
    "            x_2_0 = x_train_adv[y_train == i_class][i, 0]\n",
    "            x_2_1 = x_train_adv[y_train == i_class][i, 1]\n",
    "            if x_1_0 != x_2_0 or x_1_1 != x_2_1:\n",
    "                axs[i_class].scatter(x_2_0, x_2_1, zorder=2, c='red', marker='X')\n",
    "        axs[i_class].set_xlim((x_min, x_max))\n",
    "        axs[i_class].set_ylim((y_min, y_max))\n",
    "\n",
    "        axs[i_class].set_title('class ' + str(i_class))\n",
    "        axs[i_class].set_xlabel('feature 1')\n",
    "        axs[i_class].set_ylabel('feature 2')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2 Example: Iris dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### legend\n",
    "- colored background: probability of class i\n",
    "- orange circles: class 1\n",
    "- blue circles: class 2\n",
    "- green circles: class 3\n",
    "- red crosses: adversarial samples for class i"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x360 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_classes = 2\n",
    "x_train, y_train = get_data(num_classes=num_classes)\n",
    "x_train_adv, model = get_adversarial_examples(x_train, y_train, num_classes)\n",
    "plot_results(model, x_train, y_train, x_train_adv, num_classes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_classes = 3\n",
    "x_train, y_train = get_data(num_classes=num_classes)\n",
    "x_train_adv, model = get_adversarial_examples(x_train, y_train, num_classes)\n",
    "plot_results(model, x_train, y_train, x_train_adv, num_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3 Example: MNIST"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.1 Load and transform MNIST dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "(x_train, y_train), (x_test, y_test), min_, max_ = load_mnist()\n",
    "\n",
    "n_samples_train = x_train.shape[0]\n",
    "n_features_train = x_train.shape[1] * x_train.shape[2] * x_train.shape[3]\n",
    "n_samples_test = x_test.shape[0]\n",
    "n_features_test = x_test.shape[1] * x_test.shape[2] * x_test.shape[3]\n",
    "\n",
    "x_train = x_train.reshape(n_samples_train, n_features_train)\n",
    "x_test = x_test.reshape(n_samples_test, n_features_test)\n",
    "\n",
    "y_train = np.argmax(y_train, axis=1)\n",
    "y_test = np.argmax(y_test, axis=1)\n",
    "\n",
    "n_samples_max = 200\n",
    "x_train = x_train[0:n_samples_max]\n",
    "y_train = y_train[0:n_samples_max]\n",
    "x_test = x_test[0:n_samples_max]\n",
    "y_test = y_test[0:n_samples_max]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.2 Train LightGBMClassifier classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1]\ttraining's multi_logloss: 2.08117\n",
      "[2]\ttraining's multi_logloss: 1.9099\n",
      "[3]\ttraining's multi_logloss: 1.75426\n",
      "[4]\ttraining's multi_logloss: 1.61072\n",
      "[5]\ttraining's multi_logloss: 1.48884\n",
      "[6]\ttraining's multi_logloss: 1.38206\n",
      "[7]\ttraining's multi_logloss: 1.28643\n",
      "[8]\ttraining's multi_logloss: 1.19899\n",
      "[9]\ttraining's multi_logloss: 1.11667\n",
      "[10]\ttraining's multi_logloss: 1.03082\n",
      "[11]\ttraining's multi_logloss: 0.958193\n",
      "[12]\ttraining's multi_logloss: 0.890689\n",
      "[13]\ttraining's multi_logloss: 0.827041\n",
      "[14]\ttraining's multi_logloss: 0.772012\n",
      "[15]\ttraining's multi_logloss: 0.719107\n",
      "[16]\ttraining's multi_logloss: 0.669513\n",
      "[17]\ttraining's multi_logloss: 0.624627\n",
      "[18]\ttraining's multi_logloss: 0.581928\n",
      "[19]\ttraining's multi_logloss: 0.542164\n",
      "[20]\ttraining's multi_logloss: 0.505364\n",
      "[21]\ttraining's multi_logloss: 0.472722\n",
      "[22]\ttraining's multi_logloss: 0.440549\n",
      "[23]\ttraining's multi_logloss: 0.413029\n",
      "[24]\ttraining's multi_logloss: 0.384772\n",
      "[25]\ttraining's multi_logloss: 0.359488\n"
     ]
    }
   ],
   "source": [
    "num_round = 25\n",
    "param = {'objective': 'multiclass', 'metric': 'multi_logloss', 'num_class': 10}\n",
    "train_data = lgb.Dataset(x_train, label=y_train)\n",
    "validation_data = train_data\n",
    "model = lgb.train(param, train_data, num_round, valid_sets=[validation_data])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.3 Create and apply Zeroth Order Optimization Attack with ART"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "art_classifier = LightGBMClassifier(model=model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "zoo = ZooAttack(classifier=art_classifier, confidence=0.0, targeted=False, learning_rate=1e-1, max_iter=100,\n",
    "                binary_search_steps=100, initial_const=1e-3, abort_early=True, use_resize=False, \n",
    "                use_importance=False, nb_parallel=10, batch_size=1, variable_h=0.25)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "x_train_adv = zoo.generate(x_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_test_adv = zoo.generate(x_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.4 Evaluate LightGBMClassifier on benign and adversarial samples"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Training Score: 1.0000\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_train)\n",
    "score = np.sum(y_train == np.argmax(y_pred, axis=1)) / y_train.shape[0]\n",
    "print(\"Benign Training Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_train[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Training Predicted Label: 5\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_train[0:1, :]), axis=1)\n",
    "print(\"Benign Training Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Training Score: 0.8700\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_train_adv)\n",
    "score = np.sum(y_train == np.argmax(y_pred, axis=1)) / y_train.shape[0]\n",
    "print(\"Adversarial Training Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQQAAAECCAYAAAAYUakXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAADxZJREFUeJzt3XuQVvV9x/HPJ+wCVVHZIoQaIhdJbWIaTHe8MoaOE0IzmVGnUy2TcWibFieRJDZ0JpTpjLZjW5pRU5paZqBScEZNjJfIHzaJwzhqppFkpURRoqaIrbgs4o6Cl3DZ/faPPfy6Nbu/Z3efyzkL79cMs+c53/M858sBPpzL7znHESEAkKQPlN0AgOogEAAkBAKAhEAAkBAIABICAUBSSiDYXmL7Bdu/sL2qjB5ybO+x/aztHba7KtDPRtv7be8cNK/D9qO2Xyp+Tq1Yfzfb3ltswx22P1tif7NsP2b7edvP2f5qMb8S2zDTX8u3oVs9DsH2BEkvSvq0pFcl/VTS0oh4vqWNZNjeI6kzIg6U3Ysk2b5c0tuS7oqI84t535DUGxFrilCdGhFfr1B/N0t6OyJuLaOnwWzPlDQzIrbbniLpaUlXSfojVWAbZvq7Ri3ehmXsIVwo6RcRsTsijkj6tqQrS+hj3IiIJyT1vm/2lZI2F9ObNfAXqBTD9FcZEdEdEduL6UOSdkk6WxXZhpn+Wq6MQDhb0v8Mev2qSvrNZ4SkH9p+2vbyspsZxoyI6C6m90maUWYzw1hh+5nikKK0Q5rBbM+WdIGkbargNnxff1KLtyEnFYe2MCI+Ken3JN1Q7BJXVgwc91VtDPo6SfMkLZDULem2ctuRbJ8m6QFJN0bEwcG1KmzDIfpr+TYsIxD2Spo16PWHinmVERF7i5/7JT2kgcOcqukpjj2PH4PuL7mf/ycieiKiLyL6JW1QydvQdrsG/rHdHREPFrMrsw2H6q+MbVhGIPxU0nzbc2xPlPSHkraU0MeQbJ9anNiR7VMlLZa0M/+uUmyRtKyYXibp4RJ7+RXH/6EVrlaJ29C2Jd0paVdE3D6oVIltOFx/ZWzDll9lkKTi8sk/SpogaWNE/G3LmxiG7bka2CuQpDZJ95Tdn+17JS2SNE1Sj6SbJH1P0n2SPizpFUnXREQpJ/aG6W+RBnZ1Q9IeSdcPOl5vdX8LJT0p6VlJ/cXs1Ro4Ti99G2b6W6oWb8NSAgFANXFSEUBCIABICAQACYEAICEQACSlBkKFhwVLor96Vbm/Kvcmlddf2XsIlf5DEf3Vq8r9Vbk3qaT+yg4EABVS18Ak20skrdXAiMN/jYg1ueUnelJM1qnp9VEdVrsmjXn9zUZ/9alyf1XuTWp8f7/UOzoSh11ruTEHwlhudHK6O+IiXzGm9QEYu22xVQejt2Yg1HPIwI1OgBNMPYEwHm50AmAU2pq9guLyyXJJmqxTmr06AHWoZw9hRDc6iYj1EdEZEZ1VPokDoL5AqPSNTgCM3pgPGSLimO0Vkn6g/7vRyXMN6wxAy9V1DiEiHpH0SIN6AVAyRioCSAgEAAmBACAhEAAkBAKAhEAAkBAIABICAUBCIABICAQACYEAICEQACQEAoCEQACQEAgAEgIBQEIgAEgIBAAJgQAgIRAAJAQCgIRAAJAQCAASAgFAQiAASAgEAAmBACAhEAAkBAKAhEAAkNT1OPiqaZs7O1s/tntPS/qoKrfl/7gnnDWtqet/4S9mZ+t9p/Rn6+fM25+tn/IlZ+v7bp+YrW/v/E62fqDvnWz9ou+uzNbP/dpT2XoV1BUItvdIOiSpT9KxiOhsRFMAytGIPYTfjYgDDfgcACXjHAKApN5ACEk/tP207eWNaAhAeeo9ZFgYEXttT5f0qO2fR8QTgxcogmK5JE3WKXWuDkAz1bWHEBF7i5/7JT0k6cIhllkfEZ0R0dmuSfWsDkCTjTkQbJ9qe8rxaUmLJe1sVGMAWq+eQ4YZkh6yffxz7omI7zekqzGq+jiDI5/JX5Wd3PNutv7ap87M1t+7OH+dvOOMfP3JT+Svw5ft39+dkq3/wz8vyda3ffyebP3lo+9l62t6Pp2t/8aTka2PB2MOhIjYLekTDewFQMm47AggIRAAJAQCgIRAAJAQCAASAgFA4ojWXTs93R1xka9o2fparW/RJ7P1tZvuyNY/0p7/vv6J7mj0ZeuXfuPGbL3tnfr+Lk/Zeyxbn3QgP04huqo7Lm9bbNXB6M3fMELsIQAYhEAAkBAIABICAUBCIABICAQACYEAIDmhnstQtkkvvJatP/3LWdn6R9p7GtlOw63svjhb3/12/rkOm+bdn62/1Z8fRzDjn/4jW2+28X+3g9rYQwCQEAgAEgIBQEIgAEgIBAAJgQAgIRAAJC29H8IZkz8Yl37oumHrVX+uQr16//iSbP3gkvxzEyY8c1q2/rMvfWvUPQ12y4HfztZ/six/1/3+Hc9n63FJ/v17vpIta87Sn+UXwLC4HwKAUSMQACQEAoCEQACQEAgAEgIBQEIgAEh4LkOFTJj269l63xu92frL9+THETx3+cZs/cK/+3K2Pv2Ocu9HgLFr2DgE2xtt77e9c9C8DtuP2n6p+Dm13oYBlG8khwybJC1537xVkrZGxHxJW4vXAMa5moEQEU9Iev++6pWSNhfTmyVd1eC+AJRgrCcVZ0REdzG9T9KMBvUDoER1X2WIgbOSw56ZtL3cdpftrqM6XO/qADTRWAOhx/ZMSSp+7h9uwYhYHxGdEdHZrkljXB2AVhhrIGyRtKyYXibp4ca0A6BMNZ/LYPteSYskTbP9qqSbJK2RdJ/tL0h6RdI1zWzyZNF34I263n/04MS63v+xz+fvZ/D6ugn5D+jvq2v9tbTNnZ2tn+j302iFmoEQEUuHKTHCCDjBMHQZQEIgAEgIBAAJgQAgIRAAJAQCgIT7IZxAJpx5Rrbe8Uj+6/D/ds7WbP1TX7shW5/ynaeydZSH5zIAGDUCAUBCIABICAQACYEAICEQACQEAoCk5tefMX70vflWtv7GF38rW//vLe9l66tuuStb/8trrs7W4z/z4yRm3cJzH8rGHgKAhEAAkBAIABICAUBCIABICAQACYEAIOF+CEh6/+SSbP3um27N1ue0Ta5r/R+7a0W2Pn9Dd7bOcxmGx/0QAIwagQAgIRAAJAQCgIRAAJAQCAASAgFAwjgEjFhctiBbP33Nq9n6vXN/UNf6z3vsT7P13/zr/P0g+l7aXdf6x7OGjUOwvdH2fts7B8272fZe2zuKX5+tt2EA5RvJIcMmSUuGmP/NiFhQ/HqksW0BKEPNQIiIJyT1tqAXACWr56TiCtvPFIcUUxvWEYDSjDUQ1kmaJ2mBpG5Jtw23oO3ltrtsdx3V4TGuDkArjCkQIqInIvoiol/SBkkXZpZdHxGdEdHZrklj7RNAC4wpEGzPHPTyakk7h1sWwPhRcxyC7XslLZI0TVKPpJuK1wskhaQ9kq6PiPyX1SWdMXF6XHrWtcPWj3XvG1nXqKQJM6Zn669de262vu3ra7P1D9T4/+vzLy/O1t9a+Ea2fiIb6TiEmg9qiYilQ8y+c0xdAag0hi4DSAgEAAmBACAhEAAkBAKAhEAAkHA/BCRtc2dn681+7sF9r/44Wz/FE7P1d+NItv65L9+Y//yHtmXr4xnPZQAwagQCgIRAAJAQCAASAgFAQiAASAgEAEnNrz/j5FFrnEH/wvxzGf7rDyZn6+cvyH9+rXEGtXyr94L85z/cVdfnnwzYQwCQEAgAEgIBQEIgAEgIBAAJgQAgIRAAJIxDOIm48/xs/cWv5McBbLhsc7Z++eT8/QjqdTiOZutP9c7Jf0B/zUeHnPTYQwCQEAgAEgIBQEIgAEgIBAAJgQAgIRAAJIxDGEfa5pyTrT+/anq2/veL7s/Wf/+0A6PuqZFW93Rm64+vvThbn7o5/1wH1FZzD8H2LNuP2X7e9nO2v1rM77D9qO2Xip9Tm98ugGYaySHDMUkrI+Kjki6WdIPtj0paJWlrRMyXtLV4DWAcqxkIEdEdEduL6UOSdkk6W9KVko6PZd0s6apmNQmgNUZ1UtH2bEkXSNomaUZEHB8cvk/SjIZ2BqDlRhwItk+T9ICkGyPi4OBaDDwxdsinxtpebrvLdtdRHa6rWQDNNaJAsN2ugTC4OyIeLGb32J5Z1GdK2j/UeyNifUR0RkRnuyY1omcATTKSqwyWdKekXRFx+6DSFknLiullkh5ufHsAWmkk4xAuk3SdpGdt7yjmrZa0RtJ9tr8g6RVJ1zSnxRNH2+wPZ+tv/c7MbP3av/l+tv69M3ePuqdGWtmdHyfw43/JjzPo2PSTbH1qP+MMmq1mIETEjyR5mPIVjW0HQJkYugwgIRAAJAQCgIRAAJAQCAASAgFAwv0QRqFt5gez9d6Np2brX5zzeLa+dErPqHtqpBV7F2br29ctyNan3b8zW+84xDiCqmMPAUBCIABICAQACYEAICEQACQEAoCEQACQnFTjEI58Jv99/CN/3putrz73kWx98a+9M+qeGqmn771s/fItK7P18/7q59l6x5v5cQT92SrGA/YQACQEAoCEQACQEAgAEgIBQEIgAEgIBADJSTUOYc9V+fx78ePfber673hzXra+9vHF2br7hrsb/oDzbnk5W5/fsy1b78tWcTJgDwFAQiAASAgEAAmBACAhEAAkBAKAhEAAkDgi8gvYsyTdJWmGpJC0PiLW2r5Z0p9Jer1YdHVEZG8YcLo74iLzBHmg1bbFVh2M3vxAFo1sYNIxSSsjYrvtKZKetv1oUftmRNxaT6MAqqNmIEREt6TuYvqQ7V2Szm52YwBab1TnEGzPlnSBpONjYFfYfsb2RttTG9wbgBYbcSDYPk3SA5JujIiDktZJmidpgQb2IG4b5n3LbXfZ7jqqww1oGUCzjCgQbLdrIAzujogHJSkieiKiLyL6JW2QdOFQ742I9RHRGRGd7ZrUqL4BNEHNQLBtSXdK2hURtw+aP3PQYldLyj/6F0DljeQqw2WSrpP0rO0dxbzVkpbaXqCBS5F7JF3flA4BtMxIrjL8SNJQ1y/zDykYh9rmzs7Wj+3e05I+gLIwUhFAQiAASAgEAAmBACAhEAAkBAKAhEAAkJxUz2WohXEGONmxhwAgIRAAJAQCgIRAAJAQCAASAgFAQiAASGo+l6GhK7Nfl/TKoFnTJB1oWQOjR3/1qXJ/Ve5Nanx/50TEWbUWamkg/MrK7a6I6CytgRrorz5V7q/KvUnl9cchA4CEQACQlB0I60tefy30V58q91fl3qSS+iv1HAKAail7DwFAhRAIABICAUBCIABICAQAyf8CxJ5/ZzD+pbAAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_train_adv[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Training Predicted Label: 3\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_train_adv[0:1, :]), axis=1)\n",
    "print(\"Adversarial Training Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Test Score: 0.6700\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_test)\n",
    "score = np.sum(y_test == np.argmax(y_pred, axis=1)) / y_test.shape[0]\n",
    "print(\"Benign Test Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_test[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Benign Test Predicted Label: 7\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_test[0:1, :]), axis=1)\n",
    "print(\"Benign Test Predicted Label: %i\" % prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Test Score: 0.5800\n"
     ]
    }
   ],
   "source": [
    "y_pred = model.predict(x_test_adv)\n",
    "score = np.sum(y_test == np.argmax(y_pred, axis=1)) / y_test.shape[0]\n",
    "print(\"Adversarial Test Score: %.4f\" % score)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.matshow(x_test_adv[0, :].reshape((28, 28)))\n",
    "plt.clim(0, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Adversarial Test Predicted Label: 7\n"
     ]
    }
   ],
   "source": [
    "prediction = np.argmax(model.predict(x_test_adv[0:1, :]), axis=1)\n",
    "print(\"Adversarial Test Predicted Label: %i\" % prediction)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "venv36",
   "language": "python",
   "name": "venv36"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
